package com.weichen.studentgameexchange.game.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.weichen.studentgameexchange.common.common.Result;
import com.weichen.studentgameexchange.game.entity.Genre;
import com.weichen.studentgameexchange.game.entity.vo.GenreVo;
import com.weichen.studentgameexchange.game.service.IGenreService;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 惟尘
 * @since 2025-02-01
 */
@RestController
@RequestMapping("/game/genre")
public class GenreController {

    @Autowired
    IGenreService genreService;

    /**
     * 查看所有游戏类型
     * @return
     */
    @Operation(summary = "查看所有游戏类型")
    @GetMapping("/user/select")
    public Result userSelect(){
        List<Genre> genres = genreService.list();
        return Result.success(genres);
    }

    /**
     * 根据gnreId条件分页查看游戏类型
     * @param gnreId
     * @param page
     * @param size
     * @return
     */
    @Operation(summary = "根据gnreId条件分页查看游戏类型")
    @GetMapping("/user/page/{genreId}")
    public Result userPage(@PathVariable("genreId") Long  gnreId,
                           @RequestParam(value = "page",defaultValue = "1") Integer page,
                           @RequestParam(value = "size",defaultValue = "5") Integer size){
        return genreService.userPage(gnreId,page,size);
    }


/**
 * TODO 管理员-游戏--游戏类型管理
 */
    /**
     * 管理员添加游戏类型
     * @param genre
     * @return
     */
    @Operation(summary = "管理员添加游戏类型接口")
    @PostMapping("/admin/add")
    public Result adminAdd(@RequestBody Genre genre){
        return genreService.adminAdd(genre);
    }


    /**
     * 管理员分页查询游戏类型信息
     * @param keyword
     * @param page
     * @param size
     * @return
     */
    @Operation(summary = "管理员分页查询游戏类型信息接口")
    @GetMapping("/admin/page")
    public Result adminPage(@RequestParam("keyword") String keyword,
                            @RequestParam(value = "page",defaultValue = "1") Integer page,
                            @RequestParam(value = "size",defaultValue = "5") Integer size){
        Page<Genre> genrePage = genreService.adminPage(keyword, page, size);
        return Result.success(genrePage);
    }

    /**
     * 管理员查看所有游戏类型信息
     * @return
     */
    @Operation(summary = "管理员查看所有游戏类型信息接口")
    @GetMapping("/admin/selectAll")
    public Result adminSelectOne(){
        return Result.success(genreService.list());
    }

    /**
     * 管理员查看单个游戏类型信息(修改界面)
     * @param genreId
     * @return
     */
    @Operation(summary = "管理员查看单个游戏类型信息(修改界面)接口")
    @GetMapping("/admin/selectOneUpdate/{genreId}")
    public Result adminSelectOneUpdate(@PathVariable("genreId") Long genreId){
        return genreService.adminSelectOneUpdate(genreId);

    }


    /**
     * 管理员查看单个游戏类型信息
     * @param genreId
     * @return
     */
    @Operation(summary = "管理员查看单个游戏类型信息接口")
    @GetMapping("/admin/selectOne/{genreId}")
    public Result adminSelectOne(@PathVariable("genreId") Long genreId){
        Genre genre = genreService.getById(genreId);
        return Result.success(genre);
    }

    /**
     * 管理员修改游戏类型信息
     * @param genrevo
     * @return
     */
    @Operation(summary = "管理员修改游戏类型信息接口")
    @PutMapping("/admin/update")
    public Result adminUpdate(@RequestBody GenreVo genrevo){
        return genreService.adminUpdate(genrevo);
    }

    /**
     * 管理员删除单个游戏类型
     * @param genreId
     * @return
     */
    @Operation(summary = "管理员删除单个游戏类型接口")
    @DeleteMapping("/admin/delete/{genreId}")
    public Result adminDeleteOne(@PathVariable("genreId") Long genreId){
        genreService.adminDeleteOne(genreId);
        return Result.success();
    }

    /**
     * 管理员批量删除多个游戏类型
     * @param genreIds
     * @return
     */
    @Operation(summary = "管理员批量删除多个游戏类型接口")
    @DeleteMapping("/admin/delete/batch")
    public Result adminDeleteBatch(@RequestBody List<Long> genreIds){
        for (Long genreId : genreIds)
            adminDeleteOne(genreId);
        return Result.success();
    }
}
